define(function(require, exports){
	var $		= require("jquery");
	var pubjs	= require('pubjs');
	var view	= require('@base/view');
	var util	= require('util');

	var Budget = view.widget.extend({
		init: function( config ) {
			config = pubjs.conf( config, {
				"infoUrl": 'user/info',
				"budgetUrl": 'user/budget',
				"layout": {
					"module": '@base/dialog.base',
					"mask": 1,
					"title": LANG('预算设置'),
					"showFoot": true, // 显示底层的取消和完成按钮
					"width": 500,
					"close": null,
					"silence": false, // 点击按钮发消息
					"size": 's'
				},
				'view_model': {
					'name': '',
					'budget': '',
					'impression': '',
					'placeholderBudget': '0.00',
					'placeholderImpresion': '0',
					'impressionShow': false
				}
			});
			this.Super( 'init', arguments );
			//缓存id
			this.$id = 0;
			//模块自身的loading
			this.$loading = null;
		},
		afterBuild:function(){
			var el = this.getDOM();
			$([
				'<div class="P-dspUserBudget">',
					'<div class="M-formConGroup">',
						'<label class="group-label">' + LANG('公司名称：') + '</label>',
						'<span class="group-content">{{name}}</span>',
					'</div>',
					'<div class="M-formConGroup">',
						'<label class="group-label">' + LANG('每日预算上限') + '</label>',
						'<span class="group-content">',
							'<span pub-name="tip" pub-mod="@base/tip.desc"/>',
						'</span>',
					'</div>',
					'<div class="M-formConGroup">',
						'<label class="group-label">' + LANG('消费额：') + '</label>',
						'<span class="group-content">',
							'<input type="text" ms-duplex-value="budget" ms-attr-placeholder="placeholderBudget">',
							'<span class="ml15">'+ LANG('元') +'</span>',
						'</span>',
					'</div>',
					'<div class="M-formConGroup" ms-visible="impressionShow">',
						'<label class="group-label">' + LANG('展示量：') + '</label>',
						'<span class="group-content">',
							'<input type="text" ms-duplex-value="impression" ms-attr-placeholder="placeholderImpresion">',
							'<span class="ml15">'+ LANG('千次展示') +'</span>',
						'</span>',
					'</div>',
				'</div>'
			].join('')).appendTo(el);
			this.buildFromTemplate({
				'tip': {
					'data': LANG('控制该账号下所有活动每天的消费额或展示量。消费额输入大于0的数字；展示量输入大于0的证书，0表示不限，单位是千次。'),
					'width': 250
				}
			});
		},
		load: function( id ) {
			var self = this;
			self.$id = id;
			this.showLoading();
			pubjs.mc.send(
				this.getConfig('infoUrl'),
				{
					'_id': +id
				},
				self.onData.bind(this)
			);
		},
		onData: function(err, data) {
			this.hideLoading();
			if (err) {
				pubjs.alert(err.message);
				return false;
			}
			this.setData(data);
		},
		setData: function(data){
			var vm = this.vm.$;
			//填写充值公司名字，并且默认选择第一个充值选项
			vm.name = data.Name;
			//每日预算
			var budget = data.DailyBudget || {};
			//每日消费额预算
			vm.budget = budget.Cost || '';
			//每日展示量预算
			vm.impression = budget.Impression || '';
		},
		getData: function(){
			var vm = this.vm.$;
			return {
				'_id': this.$id,
				'budget': +vm.budget,
				'impression': +vm.impression
			};
		},
		reset: function(){
			this.$id = 0;
			this.vm.reset();
			return this;
		},
		save: function(){
			var data = this.getData();

			if(this.validate(data)){
				this.showLoading();
				var c = this.getConfig();
				pubjs.mc.send(c.budgetUrl, data, this.onSave.bind(this));
			}
		},
		onSave: function(err, data){
			this.hideLoading();
			if(err){
				pubjs.alert(err.message);
				return false;
			}
			pubjs.alert(LANG('预算设置成功'));
			this.reset();
			this.hide();
		},
		//响应点击完成事件
		onDialogOk: function(ev){
			this.save();
		},
		validate: function(data){
			if(!data._id){
				pubjs.alert(LANG('编辑客户id不正确'));
				return false;
			}
			if(!util.isNumber(data.budget) || (data.budget < 0)){
				pubjs.alert(LANG('输入消费额非法'));
				return false;
			}
			if((!util.isNumber(data.impression)) || (data.budget < 0) || (data.impression % 1 !== 0)){
				pubjs.alert(LANG('输入展示量非法，请输入正整数'));
				return false;
			}

			return true;
		}
	});
	exports.base = Budget;
});